iT邦幫忙

2025 iThome 鐵人賽

DAY 9
0
自我挑戰組

Leetcode 自學系列 第 9

自學Leetcode Day9

  • 分享至 

  • xImage
  •  

**74. Search a 2D Matrix **
1.問題描述:
給你一個 m x n 的矩陣,

  • 每一列都是從左到右排序(非遞減),
  • 且每一列的第一個數字比前一列的最後一個數字還大,
    請你找出目標數字 target 是否在矩陣中。
    2.為什麼能用二分搜尋?
  • 因為整個矩陣的元素是「像排好序的一維陣列」:
    第一列的最後一個元素 < 第二列的第一個元素,
    第二列的最後一個元素 < 第三列的第一個元素,...
    換句話說,把所有元素從左到右、從上到下攤平成一維陣列後,
    整個陣列是 遞增排序的。
    3.如何把 2D 位置換成 1D 索引?
    假設矩陣尺寸是 m 行 n 列,
  • 一維 index 從 0 到 m * n - 1,
  • 對應的 row: index / n(整除)
  • 對應的 col: index % n(取餘數)
    4.解法步驟
    1.把整個矩陣想像成一個長度為 m * n 的一維陣列,做二分搜尋。
    2.設定二分搜尋範圍是 [0, m*n -1]。
    3.找出中間的索引 mid,換算成 (row, col)。
    4.比較 matrix[row][col] 與 target:
  • 相等就回傳 true
    
  • 比 target 小,往右半邊繼續找
    
  • 比 target 大,往左半邊繼續找
    
    5.找不到就回傳 false
    5.圖解說明
    假設矩陣:
    1 3 5 7
    10 11 16 20
    23 30 34 60

將矩陣攤平成一維陣列(index: value):

Index 0 1 2 3 4 5 6 7 8 9 10 11
Value 1 3 5 7 10 11 16 20 23 30 34 60

例如 mid = 5 時:
row = 5 / 4 = 1 (整除)
col = 5 % 4 = 1
對應元素是 matrix[1][1] = 11
你比較 11 和 target,決定接下來要往左半邊或右半邊找。
6.程式碼截圖:https://ithelp.ithome.com.tw/upload/images/20250923/20169241k54953Do1W.png
7.學習心得:這次選擇的題目是之前老師學期結束後有放一些可以自己挑戰的題目,此題也是其中的一題。但這次我在使用AI工具時,我有先請Chat GPT給我幾個比較關鍵的程式碼段落讓我可以自己去想看看答案,當然那些程式碼都是這題的解題關鍵,很開心自己能解出來,讓自己的學習成效更佳。


上一篇
自學Leetcode Day8
下一篇
自學Leetcode Day10
系列文
Leetcode 自學11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言